package com.jj.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * Created by Administrator on 2016-10-26.
 */
public class DateUtil {
    private static SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
    private static SimpleDateFormat sfTime = new SimpleDateFormat("HH:mm:ss");
    private static SimpleDateFormat sfLong = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    /**
     * 将字符串转成Date
     * @param v
     * @return
     * @throws ParseException
     */
    public static Date stringToDate(String v) throws ParseException {
        if (v == null || v.length() == 0)
            return null;
        try {
            return new Date(sfLong.parse(v).getTime());
        } catch (Exception e) {
            return new Date(sf.parse(v).getTime());
        }
    }
    /**
     * Date转为string,格式为yyyy-MM-dd
     * @param date
     * @return
     */
    public static String dateToString(Date date) {
        if (date == null)
            return "";
        return sf.format(date);
    }

    /**
     * 将Date转成指定格式的string
     * @param date
     * @param format
     * @return
     */
    public static String dateToString(Date date, String format) {
        SimpleDateFormat sft = new SimpleDateFormat(format);
        return sft.format(date);
    }

    /**
     * 取date的时间部分，格式为HH:mm:ss
     * @param date
     * @return
     */
    public static String dateToTimeString(Date date) {
        if (date==null)
            return "";
        return sfTime.format(date);
    }
    /**
     * Date转为string,格式为yyyy-MM-dd HH:mm:ss
     * @param date
     * @return
     */
    public static String dateToLongString(Date date) {
        if (date == null)
            return "";
        return sfLong.format(date);
    }

    public static Date addDate(Date date, int field, int amount) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(field, amount);
        return cal.getTime();
    }

    /**
     * 判断target是否是在两个时间中间，相等认为是在这个时间内
     * 时间格式是 HH:mm:ss
     * @param target
     * @param t1
     * @param t2    结束时间，一定是比t1大，否则认为是跨天时间，如23:00:00-01:00:00
     * @return
     *          0 不在中间
     *          1 在中间，但时间没跨天    如12:00:00-15:00:00
     *          2 在中间，但时间跨天了    如23:00:00-01:00:00
     */
    public static int betweenTime(String target, String t1, String t2) {
        String[] s = t1.split(":");
        String[] e = t2.split(":");
        String[] n = target.split(":");
        int sh = Integer.parseInt(s[0]);
        int sm = Integer.parseInt(s[1]);
        int ss = Integer.parseInt(s[2]);
        int eh = Integer.parseInt(e[0]);
        int em = Integer.parseInt(e[1]);
        int es = Integer.parseInt(e[2]);
        int nh = Integer.parseInt(n[0]);
        int nm = Integer.parseInt(n[1]);
        int ns = Integer.parseInt(n[2]);
        /**
         * 两种情况
         * 1.没跨天，要在两个时间中间
         * 2.跨天，只需要比开始大，或比结束小即可
         */
        boolean gtStart = false;    // 比开始大
        boolean leEnd = false;      // 比结束小
        boolean twoDay = false;     // 是否跨天
        int between = 0;
        if (nh > sh || (nh == sh && nm >= sm)) {
            gtStart = true;
        }
        if (nh < eh || (nh == eh && nm <= em)) {
            leEnd = true;
        }
        if(sh<=eh) {
            // 没跨天
            if (gtStart && leEnd) {
                // 在中间
                between = 1;
            }
        } else {
            if (gtStart || leEnd) {
                between = 2;
            }
        }
        return between;
    }
}
